import { mergeRecursive } from '@/utils/ruoyi';
import DictOptions from './DictOptions';

/**
 * @classdesc 字典元数据
 * @property {String} type 类型
 * @property {Function} request 请求
 * @property {String} label 标签字段
 * @property {String} value 值字段
 */
export default class DictMeta {
  constructor(options) {
    this.type = options.type;
    (this.request = options.request), (this.responseConverter = options.responseConverter);
    this.labelField = options.labelField;
    this.valueField = options.valueField;
    this.lazy = options.lazy === true;
  }
}

/**
 * 解析字典元数据
 * @param {Object} options
 * @returns {DictMeta}
 */
DictMeta.parse = function (options) {
  let opts = null;
  if (typeof options === 'string') {
    opts = DictOptions.metas[options] || {};
    opts.type = options;
  } else if (typeof options === 'object') {
    opts = options;
  }
  opts = mergeRecursive(DictOptions.metas['*'], opts);
  return new DictMeta(opts);
};
